package $2_2coreclasses;

public class FnAutoBoxing {

    public static void main(String[] args) {
        // 包装类型
        // Java的数据类型分两种：基本类型 和 引用类型
        // 基本类型：byte，short，int，long，boolean，float，double，char
        // 引用类型：所有class和interface类型
        // 引用类型可以赋值为null，表示空，但基本类型不能赋值为null。
        
        // Java编译器可以帮助我们自动在int和Integer之间转型。
        // 这种直接把int变为Integer的赋值写法，称为自动装箱（Auto Boxing），反过来，把Integer变为int的赋值写法，称为自动拆箱（Auto Unboxing）。
        
        // 不变类
        // 所有的包装类型都是不变类。因此，一旦创建了Integer对象，该对象就是不变的。
        // 对两个Integer实例进行比较要特别注意：绝对不能用==比较，因为Integer是引用类型，必须使用equals()比较。
        
        
        // 因为Integer.valueOf()可能始终返回同一个Integer实例，因此，在我们自己创建Integer的时候，以下两种方法：
        // 方法1：Integer n = new Integer(100);
        // 方法2：Integer n = Integer.valueOf(100);
        // 方法2更好，因为方法1总是创建新的Integer实例，方法2把内部优化留给Integer的实现者去做，即使在当前版本没有优化，也有可能在下一个版本进行优化。
        // 我们把能创建“新”对象的静态方法称为静态工厂方法。Integer.valueOf()就是静态工厂方法，它尽可能地返回缓存的实例以节省内存。
        
        // 进制转换
        // Integer类本身还提供了大量方法，例如，最常用的静态方法parseInt()可以把字符串解析成一个整数。
        
        
        //小结
        //Java核心库提供的包装类型可以把基本类型包装为class；
        //
        //自动装箱和自动拆箱都是在编译期完成的（JDK>=1.5）；
        //
        //装箱和拆箱会影响执行效率，且拆箱时可能发生NullPointerException；
        //
        //包装类型的比较必须使用equals()；
        //
        //整数和浮点数的包装类型都继承自Number；
        //
        //包装类型提供了大量实用方法。

    }

}
